module.exports = {
    dialog_contents: {
        restore_all_settings: // 还原初始设置
            '此操作无法撤销\n' +
            '如需保留此次会话内容请先保存\n\n' +
            '以下功能内部配置不会被还原:\n' +
            '1. 自动解锁\n' +
            '2. 黑名单管理\n',
        keep_internal_config: // 保留内部配置
            '包含内部配置的功能\n' +
            '只还原此功能的开闭状态\n' +
            '而不会清空内部保存的数据\n' +
            '如解锁密码/黑名单列表等\n',
        about_account_function: // 关于账户功能
            '主账户:\n\n' +
            '执行蚂蚁森林项目时\n' +
            '用户往往希望只针对自己的账户操作\n' +
            '而非他人的账户或小号账户等\n' +
            '尤其是多账号或频繁切换账号的用户\n' +
            '可能出现非预期账户自动执行了脚本\n\n' +
            '此功能可在脚本执行时检测当前账户\n' +
            '若非主账户或未登录任何账户\n' +
            '则将自动切换或登陆主账户\n' +
            '再执行后续操作\n\n' +
            '* 主账户登录需设置账户名\n' +
            '* 账户名必须设置\n' +
            '-- 否则账户功能将自动关闭\n' +
            '* 密码可不做设置\n' +
            '* 无密码时\n' +
            '-- 脚本将在需要时\n' +
            '-- 提示用户手动输入\n\n' +
            '旧账户回切:\n\n' +
            '若脚本运行时账户非主账户A\n' +
            '记当前账户为账户B\n' +
            '脚本切换或登录至A且任务完成后\n' +
            '此功能可自动将账户回切至B\n' +
            '否则将保持主账户A的登录状态\n\n' +
            '关于连续回切:\n' +
            '每次回切将导致计数器累加一次\n' +
            '且将记录回切时的登录账户B\n' +
            '只要新一次运行的账户不是B\n' +
            '无论是主账户A还是另外的账户C\n' +
            '均将导致连续回切计数器清零\n' +
            '当连续回切达到阈值时\n' +
            '自动回切失效且计数器清零',
        before_use_main_account: // 主账户功能使用提示
            '此功能涉及到用户隐私数据\n' +
            '请用户注意账户和密码安全\n' +
            '建议稍后自行点击"帮助"按钮\n' +
            '查看并了解相关信息及注意事项',
        account_info_hint: // 信息录入提示
            '信息录入方式:\n\n' +
            'A. 支付宝录入\n' +
            '自动打开支付宝应用\n' +
            '获取当前登录的账户名\n' +
            '获取成功后自动填入当前页面\n' +
            'B. 账户库录入\n' +
            '账户库功能暂未开发\n' +
            'C. 手动录入\n' +
            '1. 全部留空\n' +
            '将跳过信息录入\n' +
            '或清除已存储的录入数据\n' +
            '2. 密码留空 只填写账户\n' +
            '脚本将在需要账户密码的时候\n' +
            '通过震动提示用户手动输入密码\n' +
            '60秒内输入完成脚本将自动继续\n' +
            '否则脚本终止\n' +
            '3. 全部填写\n' +
            '脚本将自动完成主账户的切换\n' +
            '或自动登录操作\n\n' +
            '注意:\n\n' +
            '1. 密码非必填项\n' +
            '且因安全等原因不建议填入\n' +
            '关于密码存储方式相关内容\n' +
            '可点击"密码存储方式"按钮查看\n' +
            '2. 自动切换或登录在遇到问题时\n' +
            '脚本将自动终止\n' +
            '包括但不限于密码错误\/网络不稳定\/' +
            '账号录入错误或不存在\/账号状态异常\/' +
            '其他特殊情况\n' +
            '3. 当密码已录入时\n' +
            '密码输入框留空或不做修改\n' +
            '均会保持原密码不变\n' +
            '输入新内容可覆盖旧密码\n' +
            '如若删除本地已存储的密码\n' +
            '可将"账户"内容删除留空\n' +
            '或使用"信息销毁"功能',
        how_password_stores: // 密码存储方式
            '用户输入的密码数据\n' +
            '使用"mod-pwmap"模块进行加密\n' +
            '然后存储在本地相应文件中\n\n' +
            '* 加密的原理是随机字符映射\n' +
            '-- 因此难以避免别有用心之人\n' +
            '-- 对本地数据进行解密\n' +
            '-- 或插入劫持代码语句等\n' +
            '-- 因此需要用户妥善保管设备\n' +
            '-- 避免遗失或随意借予他人\n' +
            '* 解密过程与加密过程类似\n' +
            '-- 依然是多次随机字符映射',
        destroy_main_account_info: // 主账户信息销毁
            '此操作将从本地存储中\n' +
            '移除已记录的主账户信息\n' +
            '包括账户和密码\n\n' +
            '确定要销毁主账户信息吗',
        get_account_name_from_alipay: // 从支付宝录入信息
            '可从支付宝应用获取当前账户名\n' +
            '并自动填入本页"账户"输入框\n\n' +
            '若出现当前未登录任何账户\n' +
            '或脚本运行错误等其他意外情况\n' +
            '将可能导致获取账户名失败\n\n' +
            '点击"开始获取"按钮开始操作',
        login_password_needed: // 需要密码
            '请在支付宝密码输入框中\n' +
            '手动填写密码\n' +
            '然后点击"登录"按钮\n' +
            '登陆成功后脚本将自动继续运行\n\n' +
            '脚本不会记录或存储密码\n' +
            '如有疑问或疑虑\n' +
            '可按音量键强制停止脚本\n' +
            '成功登陆后再重新运行脚本',
        account_log_back_in_max_continuous_times: // 最大连续回切次数
            '计数器达最大次数时将不再回切\n' +
            '且计数器将自动清零\n\n' +
            '* 设置 0 值可不限制回切次数\n' +
            '* 详细情况参阅\'帮助与支持\'\n' +
            '-- 位于"账户功能"主页',
        about_blacklist: // 关于黑名单管理
            '能量罩黑名单:\n\n' +
            '仅用作显示与查看\n' +
            '当检测到好友能量罩时\n' +
            '脚本自动添加好友到此名单中\n' +
            '获取并计算能量罩到期时间\n' +
            '能量罩到期后好友将自动移除\n\n' +
            '自定义黑名单:\n\n' +
            '用户可自行管理此名单\n' +
            '位于此名单中的好友\n' +
            '脚本将跳过此人的能量球检查\n' +
            '可指定自动解除时间\n\n' +
            '前置应用黑名单:\n\n' +
            '项目自动运行时\n' +
            '如果检测到当前应用在此名单中\n' +
            '例如名单里有数独游戏\n' +
            '而此时用户正在运行此游戏\n' +
            '则脚本将放弃执行定时任务\n' +
            '将任务推迟数分钟再执行\n' +
            '推迟分钟按以下方案逐次增量\n' +
            '[ 1, 1, 2, 3, 5, 8, 10 ]\n' +
            '达到 10 后将一直保持 10 分钟',
        forest_balls_click_duration: // 能量球点击时长
            '此设置值影响能量球的点击时间\n' +
            '点击方法采用press()\n\n' +
            '注意:\n' +
            '此设置值将同时影响以下操作环境:\n' +
            '1. 主页森林能量球 (绿/橙/金)\n' +
            '2. 好友森林能量球 (绿/橙/金)\n\n' +
            '设置过小值可能造成点击不被响应\n' +
            '设置过大值将影响快速收取体验',
        forest_balls_click_interval: // 能量球点击间隔
            '当可点击的能量球数量超过 1 时\n' +
            '此设置值影响能量球之间的点击间隔\n\n' +
            '注意:\n' +
            '此设置值将同时影响以下操作环境:\n' +
            '1. 主页森林能量球 (绿/橙/金)\n' +
            '2. 好友森林能量球 (绿/橙/金)\n\n' +
            '设置过小值可能遗漏点击能量球\n' +
            '设置过大值将影响快速收取体验',
        homepage_wball_max_hue_no_blue: // 金色球最大色相值 (无蓝分量)
            '用以判断能量球是否为浇水能量球\n' +
            '即金色能量球\n' +
            '判断及计算方法:\n' +
            '区域中心横向 70% 线性扫描\n' +
            '每 2 像素判断色值\n' +
            '色值转换为 RGB 色值\n' +
            '计算 120 - (R / G) × 60\n' +
            '得到无蓝分量的色值 (Hue)\n' +
            'Hue 在所有像素值中存在极大值\n' +
            '统计出可同时适配白天及黑夜场景\n' +
            '且数值出现概率合适的极大值\n' +
            '将此值作为参数值即可实现匹配',
        homepage_monitor_threshold: // 主页能量球循环监测阈值
            '当进入主页存在未成熟能量球\n' +
            '且最小成熟倒计时达到阈值时\n' +
            '将循环监测直到能量球成熟并收取\n' +
            '收取后\n' +
            '若剩余能量球最小倒计时达到阈值\n' +
            '则继续重复循环监测操作\n' +
            '直到没有未成熟能量球\n' +
            '或最小倒计时未达到设定阈值为止',
        homepage_bg_monitor_threshold: // 主页能量球返检阈值
            '好友排行榜操作期间\n' +
            '若主页能量最小成熟时间达到阈值\n' +
            '则返回森林主页开始监控能量球\n' +
            '收取完毕后\n' +
            '将继续进入好友排行榜完成操作\n\n' +
            '* 此功能不受\'循环监测\'开关影响\n' +
            '-- 除非"自收功能"关闭\n' +
            '* 返检阈值不可大于监测阈值\n' +
            '* 接受非整数数值' +
            '-- 如 1.5, 2.8 等',
        friend_collect_icon_color: // 收取图标颜色色值
            '排行榜识别绿色手形图标的参照色值\n\n' +
            '示例:\n' +
            'rgb(67,160,71)\n' +
            '#aeb0b3',
        friend_collect_icon_threshold: // 收取图标颜色检测阈值
            '排行榜识别绿色手形图标的\n' +
            '参照色值检测阈值\n' +
            '阈值越大 匹配越宽松 反之越严格\n' +
            '0 表示完全相似',
        forest_balls_pool_limit: // 能量球样本采集容量
            '限制用于存放森林页面截图样本的\n' +
            '采集池数量上限\n\n' +
            '数量过多将导致采集时间过长\n' +
            '影响收取体验\n' +
            '数量过少将导致识别率受影响\n' +
            '出现遗漏或误判',
        forest_balls_pool_itv: // 能量球样本采集间隔
            '森林页面样本采集池样本之间的' +
            '存放间隔\n\n' +
            '间隔的意义主要在于保证\n' +
            '相邻两个样本之间的有效差异性\n' +
            '间隔过大将导致采集时间过长\n' +
            '影响收取体验\n' +
            '间隔过小将导致样本差异过小\n' +
            '影响识别率并出现遗漏或误判',
        eballs_recognition_region: // 森林页面能量球识别区域
            '用于限制森林页面能量球的识别区域\n' +
            '识别的能量球必须全部包含在此区域\n' +
            '才被视为有效的能量球样本\n\n' +
            '需填写 4 个参数并以逗号分隔\n' +
            '支持的参数: 百分数/数字/小数\n' +
            '示例 1 :  10%,10%,90%,520\n' +
            '示例 2 :  0.1,120,0.9,53%\n\n' +
            '也可使用可视化工具进行参数设置:\n' +
            'tools/Floaty_Rectangle_Region.js',
        ripe_ball_detect_color_val: // 成熟能量球颜色色值
            '森林页面识别成熟能量球的参照色值\n\n' +
            '示例:\n' +
            'rgb(67,160,71)\n' +
            '#aeb0b3',
        ripe_ball_detect_threshold: // 成熟能量球颜色检测阈值
            '森林页面识别成熟能量球的\n' +
            '参照色值检测阈值\n' +
            '阈值越大 匹配越宽松 反之越严格\n' +
            '0 表示完全相似',
        unlock_code: // 设置锁屏解锁密码
            '密码长度不小于 3 位\n' +
            '无密码请留空\n\n' +
            '若采用图案解锁方式\n' +
            '总点阵数大于 9 需使用逗号分隔\n' +
            '图案解锁密码将自动简化\n' +
            '详情点击"查看示例"',
        unlock_code_demo: // 锁屏密码示例
            '滑动即可解锁: (留空)\n\n' +
            'PIN 解锁: 1001\n\n' +
            '密码解锁: 10btv69\n\n' +
            '图案解锁: (点阵序号从 1 开始)\n' +
            '3 × 3 点阵 - 1235789 或 1,2,3,5,7,8,9\n' +
            '4 × 4 点阵 - 1,2,3,4,8,12,16\n' +
            '* 点阵密码将自动简化',
        about_pattern_simplification: // 图案解锁密码简化
            '简化原理:\n' +
            '共线的连续线段组只需保留首末两点\n' +
            '途径点将自动激活\n\n' +
            '3 × 3 - 1,2,3,5,7,8,9 -> 1,3,7,9\n' +
            '4 × 4 - 1,2,3,4,8,12,16 -> 1,4,16\n' +
            '5 × 5 - 1,2,3,4,5,6 -> 1,5,6\n\n' +
            '因此以下一组设置对于图案解锁\n' +
            '可视为相同设置 (3 × 3 点阵):\n' +
            '1,2,3,6,9\n' +
            '1,1,2,2,3,3,3,6,9,9\n' +
            '1,3,9',
        unlock_code_safe_confirm: // 自动解锁风险提示
            '设备遗失或被盗时 自动解锁功能将' +
            '严重降低设备的安全性 ' +
            '甚至导致隐私泄露或财产损失 请谨慎使用\n\n' +
            '如欲了解设备遗失对策\n' +
            '请点击"了解详情"\n\n' +
            '确定要继续吗',
        about_lost_device_solution: // 关于设备遗失对策
            '一旦设备遗失或被盗\n' +
            '可通过以下方式\n' +
            '将可能的损失降到最低\n\n' +
            '* 利用\'查找我的设备\'功能\n\n' +
            '如若遗失安卓手机/平板电脑/手表等\n' +
            '可以寻找/锁定/清空该设备\n' +
            '详情参阅:\n' +
            'https://support.google.com/accounts/answer/6160491?hl=zh-Hans\n\n' +
            '* 及时挂失/冻结卡号/账号\n\n' +
            '优先冻结与财产安全相关的账号\n' +
            '或及时修改登录密码或支付密码\n' +
            '如 微博/微信/支付宝 以及 QQ 等\n' +
            '详情参阅:\n' +
            'https://www.zhihu.com/question/20206696',
        unlock_dismiss_layer_swipe_time: // 提示层页面上滑时长
            '设置整百值可保证匀速滑动\n' +
            '十位小于5可实现不同程度惯性滑动\n\n' +
            '* 通常无需自行设置\n' +
            '* 脚本会自动尝试增量赋值\n' +
            '-- 以获得最佳值',
        unlock_dismiss_layer_bottom: // 提示层页面起点位置
            '设置滑动起点的屏高百分比\n\n' +
            '* 通常无需自行设置\n' +
            '* 设置过大值可能激活非预期控件',
        unlock_dismiss_layer_top: // 提示层页面终点位置
            '设置滑动终点的屏高百分比\n\n' +
            '* 通常无需自行设置\n' +
            '* 此配置值对滑动影响程度较小',
        about_unlock_pattern_strategy: // 关于图案解锁滑动策略
            '叠加路径:\n\n' +
            '采用 gestures() 方法\n' +
            '将每两个点组成直线路径\n' +
            '所有路径利用微小时间差拼接\n' +
            '最终组合形成完整路径\n' +
            '优点:\n' +
            '1. 可实现超高速滑动\n' +
            '2. 滑动拐点定位精确\n' +
            '缺点:\n' +
            '1. 滑动路径可能会断开\n' +
            '2. 滑动总时长=(拐点数+1)×给定参数\n\n' +
            '连续路径:\n\n' +
            '采用 gesture() 方法\n' +
            '将所有坐标作为参数传入\n' +
            '完成一次性不间断滑动\n' +
            '优点:\n' +
            '1. 滑动路径不会断开\n' +
            '2. 滑动总时长=给定参数\n' +
            '缺点:\n' +
            '1. 极易发生拐点偏移现象\n' +
            '2. 拐点数及分布极大影响成功率\n\n' +
            '* 不同策略对应不同\'滑动时长\'参数\n' +
            '* 推荐优先使用\'叠加路径\'策略\n' +
            '-- 当出现路径断开现象时\n' +
            '-- 可尝试"连续路径"策略',
        about_unlock_dismiss_layer_strategy: // 关于提示层页面检测方式
            '解锁前通常需要上滑提示层页面\n' +
            '然后再输入密码或进行图案解锁\n\n' +
            '解锁模块执行逻辑默认会\n' +
            '先判断并处理提示层页面\n' +
            '再判断并处理解锁页面\n\n' +
            '优先: 上述默认行为\n' +
            '滞后: 先判断解锁页面\n' +
            '禁用: 只判断解锁页面\n\n' +
            '* 通常无需修改此项设置',
        unlock_pattern_swipe_time_segmental: // 设置图案解锁滑动时长 - 叠加路径策略
            '此参数表示两拐点间滑动时长\n' +
            '并非表示滑动总时间\n' +
            '总时间=(拐点数+1)×此参数\n' +
            '如"1379"包含两个拐点\n' +
            '参数给定为120ms\n' +
            '则总时长=(2+1)×120ms\n' +
            '即360ms\n' +
            '如"12369"有一个拐点\n' +
            '因此结果为240ms\n\n' +
            '* 通常无需自行设置\n' +
            '-- 脚本会自动尝试增量赋值\n' +
            '-- 以获得最佳值',
        unlock_pattern_swipe_time_solid: // 设置图案解锁滑动时长 - 连续路径策略
            '此参数表示首末点间滑动时长\n' +
            '亦即表示滑动总时间\n\n' +
            '* 通常无需自行设置\n' +
            '-- 脚本会自动尝试增量赋值\n' +
            '-- 以获得最佳值',
        unlock_pattern_size: // 设置图案解锁边长
            '图案解锁通常为 N × N 的点阵\n' +
            '通常边长 N 为 3\n\n' +
            '若未使用图案解锁方式\n' +
            '请保留默认值',
        about_message_showing_function: // 关于消息提示配置
            '控制台消息\n\n' +
            '简略: 只显示最终收取能量总计数据\n' +
            '详细: 显示每个好友收取数据\n' +
            '开发者测试模式: 详细显示操作信息\n\n' +
            '运行前提示对话框\n\n' +
            '息屏或上锁启动时自动跳过:\n' +
            '如果勾选 当项目启动时\n' +
            '如果设备处于息屏或未解锁状态\n' +
            '则不会显示对话框而直接运行项目\n\n' +
            '运行结果展示\n\n' +
            'Floaty: 彩色悬浮窗方式\n' +
            'Toast: 消息浮动框方式\n\n' +
            '* Floaty方式会伴随全屏遮罩层\n' +
            '-- 点击遮罩层可立即结束结果展示\n' +
            '* 此方式额外支持显示时长参数配置\n' +
            '* 若开启了定时任务信息展示\n' +
            '-- 点击相应区域可全屏展示\n' +
            '* 若开启了版本更新提示展示\n' +
            '-- 点击相应区域可查看更新\n' +
            '* Toast方式仅仅展示信息\n' +
            '-- 不支持额外的操作或中断提示\n' +
            '* 版本更新提示配置参数与\n' +
            '-- 自动检查更新页面的\n' +
            '-- 相关配置参数同步',
        timers_prefer_auto_unlock: // 定时任务建议开启自动解锁
            '检测到"自动解锁"功能未开启\n\n' +
            '多数情况下定时任务启动需配合\n' +
            '"自动解锁"功能才能完成\n' +
            '[ 亮屏 - 解锁 - 执行脚本 ]\n' +
            '等一系列操作\n\n' +
            '建议开启并设置"自动解锁"功能',
        timers_countdown_check_timed_task_ahead: // 定时任务提前运行
            '此设置值用于将下次定时任务\n' +
            '运行时间提前 n 分钟\n\n' +
            '设置 0 可关闭提前运行',
        timers_ahead_prefer_monitor_own: // 定时任务提前建议开启主页能量球监测
            '主页能量球监测未开启\n\n' +
            '此情况下提前运行脚本\n' +
            '主页能量球可能没有成熟\n' +
            '因此可能无法收取\n\n' +
            '* 开启主页能量球监测可在\n' +
            '-- 能量球成熟前不断检测能量球\n' +
            '-- 进而保证能量球及时收取\n\n' +
            '确定要保留当前设置值吗',
        timers_ahead_prefer_rank_list_threshold_review: // 定时任务提前建议开启排行榜最小倒计时复查条件
            '排行榜样本复查未开启\n' +
            '或最小倒计时阈值复查条件未激活\n\n' +
            '此情况下提前运行脚本\n' +
            '排行榜可能没有可收取目标\n' +
            '因此可能无法按时完成收取\n\n' +
            '* 排行榜样本复查能够在\n' +
            '-- 目标可收取前不断检测倒计时\n' +
            '-- 进而保证目标及时收取\n\n' +
            '确定要保留当前设置值吗',
        timers_insurance_interval: // 保险任务运行间隔
            '设置值用于当保险任务保留时\n' +
            '下次定时任务启动的时间间隔\n\n' +
            '* 保险任务在脚本运行时设置\n' +
            '* 脚本运行中每10秒钟自动重置间隔\n' +
            '* 脚本结束前自动移除所有保险任务',
        timers_insurance_max_continuous_times: // 最大连续保险次数
            '设置值用于当保险任务连续激活\n' +
            '次数超过一定值时\n' +
            '不再继续自动设置保险任务\n' +
            '避免无人值守时的无限定时循环',
        about_timers_self_manage: // 关于定时任务自动管理机制
            '自动管理:\n\n' +
            '脚本根据已设置的机制\n' +
            '自动设置一个定时任务\n' +
            '或自动更新已存在的定时任务\n' +
            '以保证在无人值守条件下\n' +
            '实现定期定时的脚本自启功能\n\n' +
            '机制简介:\n\n' +
            '1. 主页最小倒计时机制\n' +
            '脚本计算出能量成熟最小倒计时\n' +
            '并根据"定时任务提前运行"参数\n' +
            '得到一个定时时间\n' +
            '如果排行榜最小倒计时机制开启\n' +
            '将会用同样的方法得到定时时间\n' +
            '取两个定时时间的最小值\n' +
            '作为最终的下次任务运行时间\n\n' +
            '2. 排行榜最小倒计时机制\n' +
            '如上所述\n' +
            '另外若主页没有能量球\n' +
            '而且排行榜也没有倒计时数据\n' +
            '则将无法统计出定时时间\n' +
            '此时将激活"延时接力机制"\n\n' +
            '3. 延时接力机制\n' +
            '如上所述\n' +
            '此机制仅在倒计时机制全部关闭' +
            '或倒计时机制未能统计定时时间时被激活\n' +
            '延时接力机制数据格式为:\n' +
            '[ 开始时间, 结束时间, 间隔 ]\n\n' +
            '示例: [ "06:30", "00:00", 60 ]\n' +
            'a. 现在时刻 14:26\n' +
            '下次运行延时 60 分钟间隔\n' +
            '14:26 + 60 -> 15:26\n' +
            'b. 现在时刻 23:41\n' +
            '下次运行延时至 00:00\n' +
            'c. 现在时刻 02:19\n' +
            '下次运行延时至 06:30\n' +
            'd. 现在时刻 06:11\n' +
            '下次运行延时至 06:30\n\n' +
            '* 延时接力可设置多组数据\n' +
            '-- 最终取所有组数据的最小值\n' +
            '* 脚本将自动处理区间边界数据\n' +
            '-- 设置数据时无需考虑间隔取整\n' +
            '-- 当右边界时间小于左边界时\n' +
            '-- 将视右边界时间为次日时间\n' +
            '-- 如 [ "19:50", "03:00", 8 ]\n' +
            '* 仅在没有最小倒计时数据时\n' +
            '-- 此机制才有存在意义\n' +
            '-- 若开启了最小倒计时机制\n' +
            '-- 通常无需在能量成熟密集时间\n' +
            '-- 设置延时接力数据\n' +
            '-- 如 [ "07:00", "07:30", 1 ]\n' +
            '-- 这样的设置是没有必要的\n\n' +
            '4. 意外保险机制\n' +
            '假设"保险任务运行间隔"设置值为 5\n' +
            '脚本运行开始后\n' +
            '将自动设置一个 5 分钟定时任务\n' +
            '当脚本异常停止或被终止时\n' +
            '(包括音量键停止了脚本)\n' +
            '则初期设定的保险定时任务\n' +
            '将在 5 分钟后定时执行\n' +
            '确保脚本定时任务的连续性\n\n' +
            '* 无论是最小倒计时机制\n' +
            '-- 还是延时接力机制\n' +
            '-- 均在脚本即将结束之前设定\n' +
            '-- 若在此之前脚本异常终止\n' +
            '-- 则会出现定时任务"断档"\n' +
            '-- 这正是此机制存在的主要意义\n' +
            '* 若脚本长时间运行还未正常结束\n' +
            '-- 5 分钟的定时任务将被激活\n' +
            '-- 并在任务列表排队等待执行\n' +
            '-- 此时定时任务依然出现"断档"\n' +
            '-- 因此脚本在后台每 10 秒钟\n' +
            '-- 会自动延期保险任务\n' +
            '-- 保证保险任务不会被"消耗"\n' +
            '* 保险任务连续执行次数\n' +
            '-- 受到"最大连续保险次数"约束\n' +
            '-- 达到此限制时将不再设置保险任务\n' +
            '-- 避免保险任务导致脚本无限循环\n\n' +
            '有效时段:\n\n' +
            '可使项目在自动设置定时任务时\n' +
            '仅会落在设置的有效时段内\n' +
            '避免在某些时间对用户的干扰\n' +
            '如设置时段 [ 09:00, 14:00 ]\n' +
            '则脚本运行结束前设置定时任务时\n' +
            '不会超出这个范围\n' +
            '举三种情况的例子\n' +
            '分别表示不同的定时任务运行时间\n' +
            '1. 09:30\n' +
            '正常制定任务\n' +
            '因为 09:30 落在时段范围内\n' +
            '2. 15:20\n' +
            '制定第二天 09:00 的任务\n' +
            '3. 07:10\n' +
            '制定当天 09:00 的任务\n' +
            '如果时段结束值大于等于起始值\n' +
            '同延时接力机制一样\n' +
            '则将结束值视为第二天的时间点\n' +
            '例如设置 [ 21:00, 07:45 ]\n' +
            '则表示晚 9 点到次日 07:45\n' +
            '晚 23 点和早 6 点都在范围内\n' +
            '而上午 11 点则不在上述范围\n' +
            '注意区分 [ 07:45, 21:00 ]\n' +
            '如有多个时段将做并集处理\n' +
            '如果设置了一个 24 小时区间\n' +
            '则时段管理将失去意义\n' +
            '如 [ 05:23, 05:23 ]\n' +
            '等同于"全天有效"的效果',
        max_running_time_global: // 脚本单次运行最大时间
            '设置值用于脚本单次运行\n' +
            '可消耗的最大时间\n' +
            '避免无人值守时的无响应情况',
        max_queue_time_global: // 排他性任务最大排队时间
            '当旧排他性任务运行或排队时\n' +
            '新排他性任务将继续排队\n' +
            '排队时间与排他性任务总数相关\n\n' +
            '* 当排队时间达到阈值时将强制结束\n' +
            '-- 当前正在运行的排他性任务\n' +
            '* 设置过小的值可能在脚本\n' +
            '-- 正常结束前被意外终止',
        min_bomb_interval_global: // 脚本炸弹预防阈值
            '若当前脚本与最近一个正在运行的蚂蚁森林脚本的运行时间差小于此阈值\n' +
            '则视当前脚本为炸弹脚本\n' +
            '炸弹脚本将自动强制停止\n' +
            '此安全设置通常针对因某些原因短时间内运行大量相同脚本的意外情况',
        about_kill_when_done: // 关于支付宝应用保留
            '此设置用于决定脚本结束时\n' +
            '保留或关闭支付宝应用\n\n' +
            '关闭总开关后将在脚本结束时\n' +
            '无条件关闭支付宝应用\n\n' +
            '支付宝应用保留:\n' +
            '智能保留:\n' +
            '脚本运行时检测当前前置应用\n' +
            '根据前置应用是否是支付宝\n' +
            '决定保留或关闭操作\n' +
            '总是保留:\n' +
            '无条件保留支付宝应用\n\n' +
            '蚂蚁森林页面保留:\n' +
            '智能剔除:\n' +
            '脚本将自动关闭与蚂蚁森林项目相关的全部页面\n' +
            '如蚂蚁森林主页/排行榜页面等\n' +
            '最终回归到脚本启动前的支付宝页面\n' +
            '全部保留:\n' +
            '无条件保留项目运行中的所有页面\n' +
            '除非支付宝应用被触发关闭\n\n' +
            '* 关闭应用优先使用杀死应用方式\n' +
            '-- 杀死应用需要 Root 权限\n' +
            '-- 无 Root 权限将尝试最小化应用\n' +
            '-- 最小化原理并非模拟 Home 键\n' +
            '* \'智能保留\'的智能化程度十分有限',
        backup_to_local: // 备份项目至本地
            '此功能将项目相关文件打包保存在本地\n' +
            '可在还原页面恢复或删除已存在的备份',
        restore_project_confirm: // 确认还原项目
            '确定还原此版本项目吗\n' +
            '本地项目将被覆盖\n' +
            '此操作无法撤销\n\n' +
            '还原后建议重启配置工具',
        v1_6_25_restore_confirm: // v1.6.25版本还原提示
            '此版本过于陈旧\n' +
            '不建议还原此版本\n\n' +
            '还原后将丢失以下全部功能:\n' +
            '1. 项目更新功能\n' +
            '2. 项目备份还原功能\n' +
            '3. 解锁模块的高效稳定性\n' +
            '4. 解锁模块的开发者测试模式\n' +
            '5. 重要的工具函数\n\n' +
            '缺少工具函数将导致项目无法运行',
        rank_list_swipe_time: // 设置排行榜页面滑动时长
            '通常无需自行设置\n' +
            '若出现滑动异常现象\n' +
            '可尝试适当增大此设置值',
        rank_list_swipe_interval: // 设置排行榜页面滑动间隔
            '若出现遗漏目标的情况\n' +
            '可尝试适当增大此设置值',
        rank_list_scroll_interval: // 设置排行榜页面滑动间隔
            '若出现遗漏目标的情况\n' +
            '可尝试适当增大此设置值',
        rank_list_capt_pool_diff_check_threshold: // 排行榜截图样本池差异检测阈值
            '排行榜滑动前后截图样本相同时\n' +
            '脚本认为滑动无效 并进行无效次数统计 ' +
            '当连续无效次数达到阈值时 将放弃滑动并结束好友能量检查\n\n' +
            '达阈值时 脚本会判断"服务器打瞌睡"页面及"正在加载"按钮 ' +
            '根据实际情况点击"再试一次"或等待"正在加载"按钮消失 (最大等待2分钟)\n\n' +
            '* 此参数主要避免因意外情况导致当前页面不在排行榜页面时的无限滑动\n' +
            '* 截图样本相同指: 相似度极高',
        rank_list_max_not_targeted_times: // 最大连续无目标命中次数
            '排行榜每滑动一次\n' +
            '若当前页面没有好友\n' +
            '则记录一次无目标命中次数\n' +
            '当达到最大阈值时则停止排行榜检查\n' +
            '* 此参数主要避免因意外情况导致在某一页面的无限滑动',
        about_rank_list_review: // 关于排行榜样本复查
            '样本复查:\n\n' +
            '排行榜列表到达底部后\n' +
            '由复查条件决定是否重新检查排行榜\n' +
            '进而达到循环监测的目的\n\n' +
            '列表到达底部后\n' +
            '脚本会统计记录列表所有好友数据\n' +
            '包括倒计时数据及对应好友昵称\n\n' +
            '复查条件:\n\n' +
            '1. 列表状态差异:\n' +
            '比较上一次统计的昵称数据\n' +
            '只要昵称数据不一致\n' +
            '则触发复查条件\n' +
            '脚本将复查列表并重新比较数据\n' +
            '直到最近两次昵称数据完全一致\n\n' +
            '* 因至少需要两组比较数据\n' +
            '-- 所以列表至少会复查一次\n' +
            '* 即便这样会导致额外的操作\n' +
            '-- 此条件依然是循环检测的利器\n' +
            '-- 用户可自行斟酌保留与否\n\n' +
            '2. 样本点击记录:\n' +
            '在一次完整的列表滑动过程中\n' +
            '只要出现了有效点击行为\n' +
            '则触发复查条件\n\n' +
            '3. 最小倒计时阈值:\n' +
            '统计最小成熟倒计时\n' +
            '如果达到设定阈值\n' +
            '则触发复查条件\n\n' +
            '* 有效点击指进入好友森林后\n' +
            '-- 点击过可收取的能量球',
        stroll_btn_locate_main_color: // 逛一逛按钮定位主要色值
            '参数用于配置多点取色方式\n' +
            '定位逛一逛按钮时的基准色值',
        stroll_btn_match_threshold: // 逛一逛按钮定位匹配阈值
            '参数用于配置多点取色方式\n' +
            '定位逛一逛按钮时的匹配阈值',
        max_continuous_not_targeted_stroll_cycle: // 逛一逛最大无操作循环次数
            '参数用于防止逛一逛策略\n' +
            '在采集过程中遇到无操作好友\n' +
            '可能引起的无限循环\n\n' +
            '无操作情况举例:\n' +
            '· 好友位于自定义黑名单\n' +
            '· 好友使用能量保护罩\n' +
            '· 好友能量球采集失败\n' +
            '· 好友能量球点击失败\n' +
            '· 好友能量球被他人收取\n' +
            '· 用户关闭了相关功能\n',
        about_collectable_samples: // 关于可收取目标采集
            '排行榜列表 (默认策略):\n' +
            '从排行榜遍历可操作目标\n' +
            '优点:\n' +
            '1. 方案成熟且不易出现目标遗漏\n' +
            '2. 获取倒计时数据无需额外耗时\n' +
            '缺点:\n' +
            '1. 采集效率受好友数量影响较大\n' +
            '2. 差异样本池消耗较多硬件资源\n' +
            '3. 需要频繁进出排行榜页面\n\n' +
            '逛一逛按钮:\n' +
            '直接使用官方提供的快捷按钮\n' +
            '优点:\n' +
            '1. 采集效率高/不受好友数量影响\n' +
            '2. 避开排行榜的所有潜在问题\n' +
            '3. 无需考虑循环遍历条件\n' +
            '缺点:\n' +
            '1. 按钮定位判断条件可信度低\n' +
            '2. 结束页面判断条件可信度低\n' +
            '3. 过程可操控性/可预见性低\n' +
            '4. 获取倒计时数据依赖排行榜\n' +
            '5. 一定概率出现可操作目标遗漏\n\n' +
            '注意:\n' +
            '当逛一逛按钮方案出现异常时\n' +
            '脚本将自动在当前会话过程中\n' +
            '切换至"排行榜列表"采集策略',
        restore_from_local: // 还原本地备份
            '确定还原此备份吗\n' +
            '本地项目将被覆盖\n' +
            '此操作无法撤销\n\n' +
            '还原后建议重启配置工具',
        restore_original_list_data: // 恢复列表数据
            '要恢复本次会话开始前的列表数据吗\n\n' +
            '此操作不可撤销',
        add_friend_nickname_manually: // 手动添加好友昵称
            '手动添加易出错\n' +
            '且难以键入特殊字符\n' +
            '建议使用列表导入功能',
        phone_call_state_idle_value: // 通话空闲状态值
            '当设备当前通话状态值\n' +
            '与空闲状态值不一致时\n' +
            '将触发通话状态事件\n' +
            '脚本将持续等待\n' +
            '直到通话状态变为空闲\n\n' +
            '* 事件解除后\n' +
            '-- 脚本将执行一次支付宝前置操作\n' +
            '* 不同设备的通话空闲状态值\n' +
            '-- 可能存在差异',
        phone_call_state_idle_value_warn: // 通话空闲状态值设置警告
            '输入值与当前通话空闲值不一致\n' +
            '此配置将导致脚本无法正常运行\n\n' +
            '确定要使用当前输入值吗',
        rank_list_bottom_template_hint_base: // 排行榜底部控件图片模板基础提示
            '排行榜"没有更多了"控件的图片模板\n' +
            '此模板用于排行榜底部判断\n\n',
        rank_list_bottom_template_hint_exists: // 排行榜底部控件图片模板存在附加提示
            '正常模板应包含"没有更多了"字样\n' +
            '查看模板后若发现图片模板存在异常\n' +
            '可选择删除模板\n' +
            '模板删除后\n' +
            '脚本在下次运行时将自动生成新模板',
        rank_list_bottom_template_hint_not_exists: // 排行榜底部控件图片模板不存在附加提示
            '当前暂未生成图片模板\n' +
            '脚本在下次运行时将自动生成新模板',
        about_auto_enable_a11y_svc: // 关于自动开启无障碍服务
            '通过修改系统无障碍服务的列表参数\n' +
            '实现Auto.js无障碍服务的自动开启\n' +
            '此过程需要授予Auto.js以下权限:\n\n' +
            'WRITE_SECURE_SETTINGS\n\n' +
            '如果设备已经获取Root权限\n' +
            '脚本会自动自我授权\n' +
            '否则需要将手机连接到计算机\n' +
            '然后在计算机使用ADB工具\n' +
            '执行以下指令(无换行):\n\n' +
            'adb shell pm grant org.autojs.autojs ' +
            'android.permission.WRITE_SECURE_SETTINGS\n\n' +
            '执行后Auto.js将获取上述权限\n' +
            '如需撤销授权需将上述指令的\n' +
            'grant替换为revoke\n\n' +
            '注: 如果没有权限授权\n' +
            '脚本则会在需要的时候\n' +
            '提示用户手动开启无障碍服务',
        about_app_launch_springboard: // 关于启动跳板
            '某些设备或应用无法直接调用 APP\n' +
            '如 launch() 或 startActivity() 等\n' +
            '需先调用 Auto.js 再调用指定 APP\n' +
            '当脚本运行结束时\n' +
            '可自动关闭调用过的 Auto.js 页面\n' +
            '以实现跳板的无痕特性\n\n' +
            '* 无痕特性以跳板页面暴露为前提',
        about_timed_task_type: // 关于定时任务类型设置
            '一次性任务执行后将自动失效\n' +
            '每日/每周任务将按日/按周循环执行\n\n' +
            '注意:\n' +
            '1. 定时任务自动管理功能往往可以\n' +
            '-- 完成绝大多数定时任务需求\n' +
            '-- 因此不建议设置过多或\n' +
            '-- 过于繁杂的手动定时任务\n' +
            '2. 也可以使用 Auto.js 自带的\n' +
            '-- 定时任务管理功能\n' +
            '-- 但涉及月份设置或修改时很可能\n' +
            '-- 会出现 1 个月的偏差问题',
        delete_min_countdown_task_warn: // 最小倒计时任务删除警告
            '正在删除最小倒计时任务\n\n' +
            '最小倒计时任务是\n' +
            '定时任务自动管理功能的精髓\n' +
            '除非已确定此任务的异常性\n' +
            '否则强烈不建议删除此任务\n\n' +
            '确定要删除最小倒计时任务吗',
        prompt_before_running_countdown_seconds: // 提示对话框倒计时时长
            '倒计时结束前\n' +
            '用户可自主点击按钮执行相应操作\n' +
            '否则倒计时超时后脚本将自动执行',
        about_global_log_page: // 关于本地日志功能
            '本地日志功能将Auto.js生成的\n' +
            '所有控制台日志写入文件\n' +
            '包括蚂蚁森林项目及其他所有脚本\n' +
            '同样当关闭此功能时\n' +
            '将停止所有脚本日志的本地写入\n\n' +
            'Auto.js因崩溃等原因重启时\n' +
            '本地日志写入功能将失效\n' +
            '但原有的本地日志依然保留\n' +
            '仅仅是停止继续写入\n' +
            '此时运行蚂蚁森林项目\n' +
            '若本地日志写入功能开关开启\n' +
            '将自动重新激活本地日志的写入功能\n\n' +
            '功能核心代码:\n' +
            'console.setGlobalLogConfig',
        about_eballs_recognition: //
            '能量球的识别基于霍夫变换\n' +
            '关键参数如下:\n' +
            '    image: %img%\n' +
            '    dp: 1\n' +
            '    minDist: cX(0.09) (可配置)\n' +
            '    minRadius: cX(0.054)\n' +
            '    maxRadius: cX(0.078)\n' +
            '    param1: 15\n' +
            '    param2: 15\n' +
            '可参阅 __image__.js 封装模块\n' +
            '内部的 images.findCircles() 方法\n\n' +
            '上述的 %img% 传入参数有以下策略:\n' +
            '1. 灰度化\n' +
            '基本的图像处理策略\n' +
            '霍夫变换必须传入 8 位单通道灰度图像\n' +
            '2. 自适应阈值\n' +
            '根据像素的邻域块的像素值分布\n' +
            '确定该像素位置上的二值化阈值\n' +
            '3. 中值滤波 & 4. 均值滤波\n' +
            '均值滤波和中值滤波都可以平滑图像并虑去噪声\n' +
            '均值滤波采用线性方法对目标像素及周边像素取平均值后再填充目标像素\n' +
            '中值滤波采用非线性方法使用所有像素中值替代中心位置像素值\n' +
            '5. 双边滤波\n' +
            '双边滤波是一种非线性滤波方法\n' +
            '结合图像的空间邻近度和像素值相似度的一种折衷处理\n' +
            '同时考虑空域信息和灰度相似性达到保边去噪的目的\n\n' +
            '由于双边滤波耗时相对较长\n' +
            '且识别结果准确率也未见明显优势\n' +
            '因此不建议开启双边滤波策略\n' +
            '除非对识别率有极高的要求或用于测试' +
            '或关闭了 2,3,4 策略仅保留 1,5 等情况\n' +
            '但依然不建议 1,5 这样的策略组合\n\n' +
            '通过霍夫变换得到页面的圆形样本后\n' +
            '样本会按照横坐标升序排序\n' +
            '排序后可对样本数据做进一步处理:\n' +
            '1. 覆盖检测\n' +
            '如果相邻两个圆形的圆心间距过小\n' +
            '则认为样本重复并将后一个样本去除\n' +
            '2. 对称检测\n' +
            '对于所有样本的最左和最右两个样本\n' +
            '如果做中轴镜像后不满足最小球间距\n' +
            '则认为对方位置能量球缺失 ' +
            '并会做能量球补算填充\n' +
            '3. 线性插值\n' +
            '计算所有球的最小间距作为参考值\n' +
            '如果检测到有相邻两个能量球间距大于' +
            '这个参考值的某个倍数 则会做插值处理 ' +
            '可能插入 1 个或多个能量球\n\n' +
            '数据处理示例:\n' +
            '森林页面最多可展示 6 个能量球\n' +
            '将这些球大概位置记为 1, 2... 6\n' +
            '以下示例仅针对线性插值和对称检测\n' +
            '示例 1:\n' +
            '能量球 1 个 位于 3 号位置偏右\n' +
            '识别到的能量球位置 3\n' +
            '对称检测不生效\n' +
            '线性插值不生效\n' +
            '结果: 3 (正确)\n' +
            '示例 2:\n' +
            '能量球 2 个 位于 3,4\n' +
            '识别到的能量球位置 4\n' +
            '即遗漏了 3 号位置的球\n' +
            '对称检测生效\n' +
            '由 4 做镜像后补充\n' +
            '线性插值不生效\n' +
            '结果: 3,4 (正确)\n' +
            '示例 3:\n' +
            '能量球 6 个 位于 1,2,3,4,5,6\n' +
            '识别到的能量球位置 1,5,6\n' +
            '即遗漏了 2,3,4 位置的球\n' +
            '对称检测不生效\n' +
            '因为 1 和 6 镜像后不需补充\n' +
            '线性插值生效\n' +
            '5 和 6 的间距作为参考\n' +
            '会将 1 与 4 之间插入 2 个球\n' +
            '结果: 1,2,3,4,5,6 (正确)\n' +
            '示例 4:\n' +
            '能量球 5 个 位置如下:\n' +
            '1, 2偏右, 居中, 5偏左, 6\n' +
            '为方便阅读 将位置记为 A,B,C,D,E\n' +
            'A,E 对称  B,D 对称  C 居中\n' +
            '识别到的能量球位置 A,C,E\n' +
            '即遗漏了 B,D 位置的球\n' +
            '对称检测不生效\n' +
            '因为 A 和 E 镜像后不需补充\n' +
            '线性插值不生效\n' +
            'A,C 和 C,E 的间距几乎相同\n' +
            '因此无需插值\n' +
            '结果: A,C,E (错误)\n' +
            '如果上述情况的识别结果为 A,D,E\n' +
            '则与示例 3 类似\n' +
            '最终将识别到正确结果: A,B,C,D,E',
        update_ignore_confirm: // 版本忽略提示
            '确定要忽略当前版本吗\n\n' +
            '* 忽略后脚本将不再提示当前版本更新\n' +
            '* 忽略后可在配置工具中管理已忽略的所有版本',
        about_update_auto_check: // 关于自动检查更新
            '自动检查更新功能可在不同场景\n' +
            '进行版本更新的提示\n\n' +
            '* 注意: 此功能不会自动下载更新\n\n' +
            '更新提示场景:\n\n' +
            '1. 运行结果展示时\n' +
            '当"运行结果展示"功能生效时\n' +
            '可同时展示版本更新提示\n' +
            '包括Floaty或Toast方式\n\n' +
            '2. 配置工具启动时\n' +
            '在配置工具启动后\n' +
            '脚本会在后台检查项目更新\n' +
            '发现更新后以SnackBar方式提示\n\n' +
            '版本忽略管理:\n\n' +
            '对于不希望提示更新的版本\n' +
            '可添加至忽略列表中\n' +
            '例1: 当前版本为v2.0.1\n' +
            '服务器最新版本为v2.0.2\n' +
            '将v2.0.2添加至忽略列表中\n' +
            '则脚本将不会提示项目有更新\n' +
            '例2: 当前版本为v2.0.1\n' +
            '服务器最新版本为v2.0.4\n' +
            '将v2.0.4添加至忽略列表中\n' +
            '则脚本将会提示项目有更新\n' +
            '且最新版本为v2.0.3\n' +
            '此时如果再将v2.0.3添加至列表\n' +
            '则脚本依然会提示项目有更新\n' +
            '且最新版本为v2.0.2\n',
        about_rank_list_scan_strategy: // 关于排行榜页面滑动策略
            '控件滚动:\n' +
            '基于排行榜可滚动控件的\n' +
            '无障碍行为实现列表滚动\n' +
            '优点:\n' +
            '1. 滚动效率非常高\n' +
            '2. 无需关心滚动距离\n' +
            '3. 全平台无惯性滚动\n' +
            '缺点:\n' +
            '1. 依赖控件\n' +
            '2. 定位唯一性可能不够严谨\n\n' +
            '模拟滑动:\n' +
            '基于辅助服务的\n' +
            '无障碍行为实现列表滑动\n' +
            '优点:\n' +
            '1. 可定义滑动距离及时长\n' +
            '2. 不依赖排行榜控件\n' +
            '缺点:\n' +
            '1. 某些平台可能出现惯性滑动',
        about_rank_list_scroll_distance: // 关于排行榜页面滑动距离
            '采用"控件滑动"策略时\n' +
            '无法指定滑动距离\n' +
            '由"无障碍行为"实现基于控件的滚动',
        about_rank_list_scroll_time: // 关于排行榜页面滑动时长
            '采用"控件滑动"策略时\n' +
            '无法指定滑动时长\n' +
            '由"无障碍行为"决定控件的滚动时长',
    },
    image_base64_data: {
        ic_outlook: _icOutlook(),
        ic_qq: _icQq(),
        ic_github: _icGithub(),
        ic_fetch: _icFetch(),
        ic_backpack: _icBackpack(),
        avt_detective: _avtDetective(),
        qr_alipay_dnt: _qrAlipayDnt(),
        qr_wechat_dnt: _qrWechatDnt(),
    },
};

// constructor(s) //

/**
 * @constructor
 * @param {string} name
 * @param {string} base64
 * @param {number} [src_dev_width]
 */
function _Base64Image(name, base64, src_dev_width) {
    let _key = '_$_base64_img_' + name;
    this.name = name;
    this.base64 = base64;
    this.src_dev_width = src_dev_width;
    this.getImage = function () {
        return global[_key] || (global[_key] = images.fromBase64(this.base64));
    };
}

// base64 function(s) //

function _icOutlook() {
    // noinspection SpellCheckingInspection
    return new _Base64Image('ic_outlook', '');
}

function _icQq() {
    // noinspection SpellCheckingInspection
    return new _Base64Image('ic_qq', '');
}

function _icGithub() {
    // noinspection SpellCheckingInspection
    return new _Base64Image('ic_github', '');
}

function _icFetch() {
    // device width: 1644px; quality: 90; format: jpg; source: Auto.js
    // noinspection SpellCheckingInspection
    return new _Base64Image('ic_fetch', '', 1644);
}

function _icBackpack() {
    // device width: 1644px; quality: 79; format: jpg; source: XnShell
    // noinspection SpellCheckingInspection
    return new _Base64Image('ic_backpack', '', 1644);
}

function _avtDetective() {
    // noinspection SpellCheckingInspection
    return new _Base64Image('avt_detective', '');
}

function _qrAlipayDnt() {
    // noinspection SpellCheckingInspection
    return new _Base64Image('qr_alipay_dnt', '');
}

function _qrWechatDnt() {
    // noinspection SpellCheckingInspection
    return new _Base64Image('qr_wechat_dnt', '');
}